﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Prolog
{
    class BasicFunction
    {
        #region ------ FILE -------- 
        public static List<string> File_ReadFile(string path)
        {
            FileStream fs = new FileStream(path, FileMode.Open);
            StreamReader reader = new StreamReader(fs, Encoding.UTF8);            
            List<string> result = new List<string>();
            string text;
            while (!reader.EndOfStream)
            {
                text = reader.ReadLine();
                if (text != "")                
                    result.Add(text);                
            }
            reader.Close();
            fs.Close();

            return result;
        }

        public static void File_WriteFile(string path,List<string> content)
        {
            FileStream fs = new FileStream(path, FileMode.Create);
            StreamWriter writer = new StreamWriter(fs, Encoding.UTF8);
            foreach (string line in content)            
                writer.WriteLine(line);

            writer.Flush();
            writer.Close();
            fs.Close();
        }

        #endregion

        #region ------ XỬ LÝ -------
        public static List<string> GetListString(string content)
        {
            List<string> result = new List<string>();
            result.AddRange(content.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries));
            return result;
        }
        #endregion
    }

    class Replay
    {
        List<string> tv;
        List<string> pl;

        public Replay()
        {
            // u, ư, e, ê, o, ơ, ô, a ,â, ă, i, y, d, đ
            tv = new List<string>();
            pl = new List<string>();

            Add("đ", "d09");

            Add("ú", "u01");            Add("ù", "u02");            Add("ủ", "u03");            Add("ũ", "u04");            Add("ụ", "u05");
            Add("ư", "u70");            
            Add("ứ", "u71");            Add("ừ", "u72");            Add("ử", "u73");            Add("ữ", "u74");            Add("ự", "u75");

            Add("é", "e01");            Add("è", "e02");            Add("ẻ", "e03");            Add("ẽ", "e04");            Add("ẹ", "e05");
            Add("ê", "e10");
            Add("ế", "e11");            Add("ề", "e12");            Add("ể", "e13");            Add("ễ", "e14");            Add("ệ", "e15");

            Add("ó", "o01");            Add("ò", "o02");            Add("ỏ", "o03");            Add("õ", "o04");            Add("ọ", "o05");
            Add("ô", "o10");
            Add("ố", "o11");            Add("ồ", "o12");            Add("ổ", "o13");            Add("ỗ", "o14");            Add("ộ", "o15");
            Add("ơ", "o20");
            Add("ớ", "o21");            Add("ờ", "o22");            Add("ở", "o23");            Add("ỡ", "o24");            Add("ợ", "o25");

            Add("á", "a01");            Add("à", "a02");            Add("ả", "a03");            Add("ã", "a04");            Add("ạ", "a05");
            Add("â", "a10");
            Add("ấ", "a11");            Add("ầ", "a12");            Add("ẩ", "a13");            Add("ẫ", "a14");            Add("ậ", "a15");
            Add("ă", "a20");
            Add("ắ", "a21");            Add("ằ", "a22");            Add("ẳ", "a23");            Add("ẵ", "a24");            Add("ặ", "a25");

            Add("í", "i01");            Add("ì", "i02");            Add("ỉ", "i03");            Add("ĩ", "i04");            Add("ị", "i05");

            Add("ý", "y01");            Add("ỳ", "y02");            Add("ỷ", "y03");            Add("ỹ", "y04");            Add("ỵ", "y05");            
        }

        void Add(string _tv, string _pl)
        {
            tv.Add(_tv);
            pl.Add(_pl);
        }

        /// <summary>
        /// Chuyển đổi các ký tự trong tiếng việt sang dạng prolog: á --> a01
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public string ConvertTiengVietToProlog(string str)
        {
            string result = "", substr;
            int index,id;
            for (id = 0; id < str.Length; id++)
            {
                substr = str.Substring(id, 1);
                index = tv.IndexOf(substr);
                if (index >= 0)
                    result += pl[index];
                else
                    result += substr;
            }

            if (id == 0) 
                return str;
            else
                return result;
        }
        public string ConvertPrologToTiengViet(string str)
        {
            string result = "", substr;
            int index,id;
            
            for (id = 0; id < str.Length; id++)           
            {
                if (str.Length - id >= 3)
                {
                    substr = str.Substring(id, 3);
                    index = pl.IndexOf(substr);
                    if (index >= 0)
                    {
                        result += tv[index];
                        id += 2;
                    }
                    else
                        result += str.Substring(id, 1);
                }
                else
                {
                    result += str.Substring(id, 1);
                }
            }
            return result;
        }
    }
}
